<?php

require_once("Utils.php");
require_once("DatabaseLib.php");

define('IP_VISITORS_TABLE_NAME',"IPVisitatori");
define('VISITORS_COUNTER_TABLE_NAME',"ContatoreVisite");

class VisitsCounter
{

	private $db;
	private $ip;

	public function __construct($dbmngr)
	{
		$this->db = $dbmngr;
		$this->ip = Utils::getRealIpAddr();
	}

	/**
	 * Cancella tutti gli IP dal database di visitatori il cui ultimo accesso è troppo vecchio rispetto all' "IPLifeTime" specificato (in minuti)
	**/
	public function removeTooOldVisitorsIP($IPLifeTime)
	{
		$lifetime_limit = time()-($IPLifeTime*60);
		return $this->db->EraseRecords(IP_VISITORS_TABLE_NAME,"UltimoAccesso < ".$lifetime_limit);
	}

	/**
	 * Analizza l'IP corrente e se esso rappresenta un nuovo visitatore incrementa il contatore visite
	**/
	public function analyzeIP()
	{
		//INET_ATON(expr) MySQL function -> converte indirizzi IP formato stringa IPv4 "x.x.x.x" nel corrispondente valore 'unsinged int' (32bit)
		if($this->db->GetRecordsNum(IP_VISITORS_TABLE_NAME,"IP = INET_ATON('".$this->ip."')"))//c'è già l'IP di questo visitatore?
		{
			//aggiorna ultimo accesso
			$this->db->SetValueFromRecords(IP_VISITORS_TABLE_NAME,"UltimoAccesso","IP = INET_ATON('".$this->ip."')",time());
			return TRUE;
		}
		else
		{
			//aggiunge questo IP nella tabella dei visitatori correnti
			$this->db->AddRecord(IP_VISITORS_TABLE_NAME,"IP, UltimoAccesso","INET_ATON('".$this->ip."'), ".time());
			//aumenta il contatore visite globale
			$this->db->SetValueFromRecords(VISITORS_COUNTER_TABLE_NAME,"Contatore",NULL,"(Contatore+1)");
			return FALSE;
		}
	}

	/**
	 * Ritorna il numero di visite fin ora
	**/
	public function getVisitCounterValue()
	{
		return $this->db->GetValueFromRecords(VISITORS_COUNTER_TABLE_NAME,"Contatore",NULL);
	}

}

?>